計算機科学のブログ

Go - keep it to yourself - Encapsulation and Embedding - setter methods, getter methods, errors, nil

Head First GoJay 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
%