go言語
2020.07.29
Go言語の構造体で世の中の全てを表すことが…
可能です。
さて、書いていきましょう。
複数のデータやメソッドを一つの「型」として定義したもの、それが構造体です。
まずはuserという構造体を作ります。
import "fmt"
type user struct{
}
func main() {
fmt.Println()
}
~
structというのを使うだけです。
userという構造体に
名前をstringで、年齢をintで持たせてみてから、
それをnewとして、printするとこのようになります。
package main
import "fmt"
type user struct{
name string
age int
}
func main() {
u :=new(user)
fmt.Println(u)
}
~
go run index4.go とかで実行すると結果はこうなります。
[vagrant@localhost ~]$ go run index4.go
&{ 0}
変数を入れてみよう
package main
import "fmt"
type user struct{
name string
age int
}
func main() {
u :=new(user)
u.name = 'yamamoto'
u.age = 100
fmt.Println(u)
}
~
[vagrant@localhost ~]$ go run index4.go
&{yamamoto 100}
中見えましたね。
ポインターではなくて初期化をすることで直接表示することもできます。
package main
import "fmt"
type user struct{
name string
age int
}
func main() {
//u :=new(user)
//u.name = "yamamoto"
//u.age = 100
u :=user{name:"yamamoto",age:100}
fmt.Println(u)
}
~
[vagrant@localhost ~]$ go run index4.go
{yamamoto 100}
あまり面白くなかったのでwebサーバーでも作ります。
package main
import "fmt"
import "net/http"
//このようにhttp通信をするための準備をします。net/httpを読み込みます。
type user struct{
name string
age int
}
//リクエストを受け取ったらレスポンスを書き出す
//rはhttp.Requestのポインタ
func handler(w http.ResponseWriter , r *http.Request) {
fmt.Fprintf(w, "hello %s", r.URL.Path[1:])
}
func main() {
//u :=new(user)
//u.name = "yamamoto"
//u.age = 100
u :=user{name:"yamamoto",age:100}
fmt.Println(u)
http.HandleFunc("/" , handler)
http.ListenAndServe(":8080",nil)
}
~
というわけで:8080でアクセスしたpathをwebページに出力するようにしたので、
ipをip aのコマンドで調べると….
[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 83350sec preferred_lft 83350sec
inet6 fe80::5054:ff:fe4d:77d3/64 scope link
valid_lft forever preferred_lft forever
vagrantの設定忘れてた^^
config.vm.network “private_network”, ip: “192.168.33.10”
を忘れていたので、直してreloadして再ログイン。
[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 86380sec preferred_lft 86380sec
inet6 fe80::5054:ff:fe4d:77d3/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8c:b8:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe8c:b8bc/64 scope link
valid_lft forever preferred_lft forever
というわけで
http://192.168.33.10:8080/
にアクセスすると無事に表示されました。