Blogブログ

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/
にアクセスすると無事に表示されました。