Go - keep it to yourself - Encapsulation and Embedding - setter methods, getter methods, errors, nil
Head First Go、 Jay McGavren(著)、O’Reilly Media)の Chapter 10(keep it to yourself - Encapsulation and Embedding)、p.306(Exercise)の解答を求めてみる。
コード
main.go
package main
import (
"fmt"
"geo/geo"
"log"
)
func main() {
coordinates := geo.Coordinates{}
err := coordinates.SetLatitude(37.42)
if err != nil {
log.Fatal(err)
}
err = coordinates.SetLongitude(-1222.08)
if err != nil {
log.Fatal(err)
}
fmt.Println(coordinates.Latitude())
fmt.Println(coordinates.Longitude())
}
コード
geo/geo.go
package geo
import "errors"
type Coordinates struct {
latitude float64
longitude float64
}
func (c *Coordinates) Latitude() float64 {
return c.latitude
}
func (c *Coordinates) Longitude() float64 {
return c.longitude
}
func (c *Coordinates) SetLatitude(latitude float64) error {
if latitude < -90 || latitude > 90 {
return errors.New("invalid latitude")
}
c.latitude = latitude
return nil
}
func (c *Coordinates) SetLongitude(longitude float64) error {
if longitude < -180 || longitude > 180 {
return errors.New("invalid longitude")
}
c.longitude = longitude
return nil
}
入出力結果(Terminal, Zsh)
% go run ./main.go
2025/01/13 22:28:06 invalid longitude
exit status 1
% cat go.mod
module geo
go 1.23.4
%